/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.dao.da.TipoRecursoDAO;
import br.siseventos.model.TdTipoRecurso;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Bruno
 */
@ManagedBean(name = "tipoRecursoBean")
@SessionScoped
public class TipoRecursoBean {

    /**
     * Creates a new instance of TipoRecursoBean
     */
    //Construtor
    public TipoRecursoBean() {
        //inicializar o objeto dao
        daoTipoRecurso = new TipoRecursoDAO();

        //inicializar a lista de tipos de recursos
        repopularLista();
    }
    //Campos
    private String nome;
    private String descricao;
    private TdTipoRecurso tipoRecursoSelecionado;
    private TipoRecursoDAO daoTipoRecurso;
    private List<TdTipoRecurso> tiposRecurso;
    //Getters e Setters

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    public void repopularLista() {
        tiposRecurso = daoTipoRecurso.consultarTodos();
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the tipoRecursoSelecionado
     */
    public TdTipoRecurso getTipoRecursoSelecionado() {
        return tipoRecursoSelecionado;
    }

    /**
     * @param tipoRecursoSelecionado the tipoRecursoSelecionado to set
     */
    public void setTipoRecursoSelecionado(TdTipoRecurso tipoRecursoSelecionado) {
        this.tipoRecursoSelecionado = tipoRecursoSelecionado;
    }

    /**
     * @return the daoTipoRecurso
     */
    public TipoRecursoDAO getDaoTipoRecurso() {
        return daoTipoRecurso;
    }

    /**
     * @param daoTipoRecurso the daoTipoRecurso to set
     */
    public void setDaoTipoRecurso(TipoRecursoDAO daoTipoRecurso) {
        this.daoTipoRecurso = daoTipoRecurso;
    }

    /**
     * @return the tiposRecurso
     */
    public List<TdTipoRecurso> getTiposRecurso() {
        return tiposRecurso;
    }

    /**
     * @param tiposRecurso the tiposRecurso to set
     */
    public void setTiposRecurso(List<TdTipoRecurso> tiposRecurso) {
        this.tiposRecurso = tiposRecurso;
    }
    //Actions e Listeners

    public void cadastrarTipoRecurso(ActionEvent e) {
        //Criando o objeto a ser persistido no banco
        TdTipoRecurso tipoRecurso = new TdTipoRecurso(nome, descricao, null, null, null);
        try {
            //Incluindo o objeto no banco
            daoTipoRecurso.incluir(tipoRecurso);

            //Atualizando dataTable
            repopularLista();

            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de recurso cadastrado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Adicionando o parametro de callback
            CallbackHelper.addCallback("tipoRecursoSalvo", true);
        } catch (Exception ex) {
            MessageHelper.showGlobalMessage("Erro ao cadastrar tipo de recurso!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirTipoRecurso(ActionEvent e) {

        try {
            //Excluindo o tipo de recurso selecionado
            daoTipoRecurso.excluir(getTipoRecursoSelecionado().getIdtTipoRecurso());

            //Atualizando dataTable
            repopularLista();

            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de Recurso excluído com sucesso!", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            MessageHelper.showGlobalMessage("Erro ao excluir tipo de recurso!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarTipoRecurso(ActionEvent e) {

        try {
            //Excluindo o tipo de recurso selecionado
            daoTipoRecurso.alterar(getTipoRecursoSelecionado());

            //Atualizando dataTable
            repopularLista();

            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de Recurso alterado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Adicionando o parametro de callback
            CallbackHelper.addCallback("tipoRecursoEditado", true);
        } catch (Exception ex) {
            MessageHelper.showGlobalMessage("Erro ao alterar tipo de recurso!", FacesMessage.SEVERITY_ERROR);
        }
    }
}
